// projects/oa/pages/project_resource/research_resource_edit.js
const pageHelper = require('../../../config/project_helpers_config').pageHelper;
const cloudHelper = require('../../../config/project_helpers_config').cloudHelper;
const ResearchResourceBiz = require('../../../config/path_resolver.js').pageHelper;

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		id: '', // 项目ID
		resourceTypes: [], // 可选资源类型
		selectedType: '', // 选中的资源类型
		resourceName: '', // 资源名称
		resourceDesc: '', // 资源描述
		filePath: '', // 上传文件路径
		fileName: '', // 文件名
		fileSize: 0, // 文件大小
		allowedTypes: [], // 允许上传的资源类型
		isSubmitting: false, // 是否正在提交
		selectedTypeName: '' // Added for selected type name
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		if (!options || !options.id) {
			pageHelper.showModal('参数错误', '缺少项目ID');
			setTimeout(() => wx.navigateBack(), 1500);
			return;
		}
		
		// 设置项目ID
		this.setData({
			id: options.id
		});
		
		// 处理允许的资源类型
		let allowedTypes = [];
		if (options.allowedTypes) {
			allowedTypes = options.allowedTypes.split(',');
		} else if (options.type) {
			allowedTypes = [options.type];
			this.setData({
				selectedType: options.type
			});
		} else {
			// 默认允许所有类型
			allowedTypes = Object.values(ResearchResourceBiz.RESOURCE_TYPES);
		}
		
		// 设置允许的资源类型
		this.setData({
			allowedTypes,
			resourceTypes: this._getResourceTypeOptions(allowedTypes)
		});
		
		// 设置导航栏标题
		wx.setNavigationBarTitle({
			title: '上传项目资源'
		});
	},

	/**
	 * 获取资源类型选项
	 * @param {Array} allowedTypes 允许的资源类型
	 * @returns {Array} 资源类型选项数组
	 */
	_getResourceTypeOptions(allowedTypes) {
		const allOptions = [
			{ value: ResearchResourceBiz.RESOURCE_TYPES.DOC, label: '文档' },
			{ value: ResearchResourceBiz.RESOURCE_TYPES.PCB, label: 'PCB' },
			{ value: ResearchResourceBiz.RESOURCE_TYPES.BOM, label: 'BOM' },
			{ value: ResearchResourceBiz.RESOURCE_TYPES.SOFTWARE, label: '软件' },
			{ value: ResearchResourceBiz.RESOURCE_TYPES.IMAGE, label: '图片' }
		];
		
		// 根据允许的类型筛选选项
		return allOptions.filter(option => allowedTypes.includes(option.value));
	},

	/**
	 * 资源类型选择变更
	 * @param {Object} e 事件对象
	 */
	onTypeChange(e) {
		const selectedType = e.detail.value;
		const selectedOption = this.data.resourceTypes.find(item => item.value === selectedType);
		const selectedTypeName = selectedOption ? selectedOption.label : '';
		
		this.setData({
			selectedType: selectedType,
			selectedTypeName: selectedTypeName
		});
	},

	/**
	 * 资源名称输入
	 * @param {Object} e 事件对象
	 */
	onNameInput(e) {
		this.setData({
			resourceName: e.detail.value
		});
	},

	/**
	 * 资源描述输入
	 * @param {Object} e 事件对象
	 */
	onDescInput(e) {
		this.setData({
			resourceDesc: e.detail.value
		});
	},

	/**
	 * 选择文件
	 */
	onChooseFile() {
		const selectedType = this.data.selectedType;
		if (!selectedType) {
			pageHelper.showModal('提示', '请先选择资源类型');
			return;
		}
		
		// 获取当前类型允许的文件格式
		const config = ResearchResourceBiz.getResourceConfig();
		const allowedFormats = config.allowedFormats[selectedType] || [];
		const maxSize = config.maxSize[selectedType] || 10; // 默认10MB
		
		// 如果是图片类型，使用图片选择器
		if (selectedType === ResearchResourceBiz.RESOURCE_TYPES.IMAGE) {
			wx.chooseImage({
				count: 1,
				sizeType: ['original', 'compressed'],
				sourceType: ['album', 'camera'],
				success: (res) => {
					const file = res.tempFiles[0];
					const filePath = res.tempFilePaths[0];
					const fileName = filePath.substring(filePath.lastIndexOf('/') + 1);
					const fileSize = file.size / 1024 / 1024; // 转换为MB
					
					// 检查文件大小
					if (fileSize > maxSize) {
						pageHelper.showModal('图片过大', `图片大小不能超过${maxSize}MB`);
						return;
					}
					
					// 更新文件信息
					this.setData({
						filePath: filePath,
						fileName: fileName || '图片.png',
						fileSize: fileSize.toFixed(2)
					});
				}
			});
		} else {
			// 选择普通文件
			wx.chooseMessageFile({
				count: 1, // 最多选择1个文件
				type: 'file',
				success: (res) => {
					const file = res.tempFiles[0];
					const fileName = file.name || '未命名文件';
					const fileSize = file.size / 1024 / 1024; // 转换为MB
					
					// 检查文件大小
					if (fileSize > maxSize) {
						pageHelper.showModal('文件过大', `文件大小不能超过${maxSize}${selectedType === ResearchResourceBiz.RESOURCE_TYPES.BOM ? 'KB' : 'MB'}`);
						return;
					}
					
					// 检查文件格式
					const fileExt = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();
					if (allowedFormats.length > 0 && !allowedFormats.includes(fileExt)) {
						pageHelper.showModal('格式不支持', `当前资源类型支持的格式: ${allowedFormats.join(', ')}`);
						return;
					}
					
					// 更新文件信息
					this.setData({
						filePath: file.path,
						fileName: fileName,
						fileSize: fileSize.toFixed(2)
					});
				}
			});
		}
	},

	/**
	 * 提交表单
	 */
	async onSubmit() {
		// 表单校验
		if (!this.data.selectedType) {
			pageHelper.showModal('提示', '请选择资源类型');
			return;
		}
		
		if (!this.data.resourceName) {
			pageHelper.showModal('提示', '请输入资源名称');
			return;
		}
		
		if (!this.data.filePath) {
			pageHelper.showModal('提示', '请选择要上传的文件');
			return;
		}
		
		if (this.data.isSubmitting) {
			return; // 防止重复提交
		}
		
		try {
			this.setData({
				isSubmitting: true
			});
			
			// 显示上传中提示
			wx.showLoading({
				title: '上传中...',
				mask: true
			});
			
			// 上传文件
			const fileResult = await cloudHelper.uploadFile(this.data.filePath, `project_resource/${this.data.id}`, this.data.fileName);
			
			if (!fileResult || !fileResult.fileID) {
				pageHelper.showModal('上传失败', '文件上传失败，请重试');
				this.setData({
					isSubmitting: false
				});
				wx.hideLoading();
				return;
			}
			
			// 提交资源信息
			const data = {
				projectId: this.data.id,
				resourceName: this.data.resourceName,
				resourceDesc: this.data.resourceDesc || '',
				resourceType: this.data.selectedType,
				fileId: fileResult.fileID,
				fileName: this.data.fileName,
				fileSize: this.data.fileSize
			};
			
			const result = await cloudHelper.callCloudData('project_resource/add', data);
			
			if (!result) {
				throw new Error('提交失败');
			}
			
			// 隐藏加载提示
			wx.hideLoading();
			
			// 显示成功提示
			pageHelper.showSuccToast('上传成功', 1500);
			
			// 返回上一页
			setTimeout(() => {
				wx.navigateBack();
			}, 1500);
		} catch (err) {
			console.error('[资源上传] 失败:', err);
			wx.hideLoading();
			pageHelper.showModal('上传失败', '请重试');
			this.setData({
				isSubmitting: false
			});
		}
	}
})